#include <bits/stdc++.h>
using namespace std;

/*
3289. 数字小镇中的捣蛋鬼
已解答
简单
相关标签
premium lock icon
相关企业
提示
数字小镇 Digitville 中，存在一个数字列表 nums，其中包含从 0 到 n - 1 的整数。每个数字本应 只出现一次，然而，有 两个 顽皮的数字额外多出现了一次，使得列表变得比正常情况下更长。

为了恢复 Digitville 的和平，作为小镇中的名侦探，请你找出这两个顽皮的数字。

返回一个长度为 2 的数组，包含这两个数字（顺序任意）。

 

示例 1：

输入： nums = [0,1,1,0]

输出： [0,1]

解释：

数字 0 和 1 分别在数组中出现了两次。

示例 2：

输入： nums = [0,3,2,1,3,2]

输出： [2,3]

解释:

数字 2 和 3 分别在数组中出现了两次。

示例 3：

输入： nums = [7,1,5,4,3,4,6,0,9,5,8,2]

输出： [4,5]

解释:

数字 4 和 5 分别在数组中出现了两次。

 

提示：

2 <= n <= 100
nums.length == n + 2
0 <= nums[i] < n
输入保证 nums 中 恰好 包含两个重复的元素。
*/

// 法一
class Solution {
public:
    vector<int> getSneakyNumbers(vector<int>& nums) {
        int n = nums.size();
        vector<int> count(n, 0);
        vector<int> ans;

        // cnt all show
        for (int x : nums)  count[x]++;

        // speacial 出现2次的数字
        for (int i = 0; i < n; i++) {
            if (count[i] == 2)  ans.push_back(i);
        }

        return ans;
    }
};

// 法二
class Solution {
public:
    vector<int> getSneakyNumbers(vector<int>& nums) {
        vector<int> ans;
        // 双重循环找重复元素（原数组仅两个元素重复两次）
        for (int i = 0; i < nums.size() - 1; i++) { // 外层遍历每个起始元素
            for (int j = i + 1; j < nums.size(); j++) { // 内层找当前元素后的重复
                if (nums[j] == nums[i]) { // 找到重复，加入结果
                    ans.push_back(nums[j]);
                }
            }
        }
        return ans;
    }
};